﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WooCoo.DataPortal
{
    /// <summary>
    /// 客户端数据请求代理类接口    
    /// </summary>
    /// <remarks>
    /// 客户端按分布式系统还分UI端及数据请求客户端.
    /// </remarks>
    public interface IDataPortalProxy : IQuery
    {
        /// <summary>
        /// 是否为远程服务调用.如果为否则表示客户端与服务端都在同个程序域的单机环境中.        
        /// </summary>
        bool IsServerRemote { get; }
        /// <summary>
        /// 远程服务基地址
        /// </summary>
        Uri BaseAddress { get; set; }

        /// <summary>
        /// 创建业务对象，对应CRUD中的C应用
        /// </summary>
        /// <param name="entityOrList"></param>
        DataPortalResult Create<T>(object entityOrList);

        /// <summary>
        /// 获取业务对角数据，对应CRUD中的R应用
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        DataPortalResult Fetch<T>(object criteria);

        /// <summary>
        /// 向DataPortal更新数据，对应CRUD中的Update,但对于WooCoo的Entity，将根据状态自动选择对应的数据操作
        /// </summary>
        /// <param name="entityOrList"></param>
        /// <returns></returns>
        DataPortalResult Update<T>(object entityOrList);     
        /// <summary>
        /// 删除指定的数据，对应CRUD中的D
        /// </summary>
        /// <param name="entityOrList"></param>
        /// <returns></returns>
        DataPortalResult Delete<T>(object entityOrList);
        /// <summary>
        /// 执行指定的命令
        /// </summary>
        /// <param name="requestMethod"></param>
        /// <returns></returns>
        DataPortalResult Execute(ActionInfo requestMethod);
        /// <summary>
        /// 接收数据门户数据时，采用反序列化的方式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="result"></param>
        /// <returns></returns>
        T DeserializeObject<T>(DataPortalResult result);

    }
}
